Для того, чтобы двигаться дальше и запускать на выполнения команды нам нужно объявить дополнительные переменные.
//Группа переменных для выполнения команды
ICommandText* pICommandText;
LPCOLESTR wSQLString = OLESTR("SELECT CompanyName,City, Phone, Fax FROM Customers ORDER BY CompanyName, City");
IRowset* pIRowset;LONG cRowsAffected;
Первая переменная это указатель на интерфейс, с помощью которого можно выполнять текстовые команды. Дальше сама строка с SQL запросом. Дальше указатель на интерфейс для работы с рядами данных. И так в прошлый раз мы создали сессию. Пора создать объект команд. Все как всегда получаем интерфейс, проверяем на ошибки, предыдущий освобождаем.
// Создаем обьект команды
hr = pIDBCreateCommand->CreateCommand(NULL, IID_ICommandText,(IUnknown**) &pICommandText);
if (FAILED(hr))
{
cout << "Error create command object" << endl;
pIDBInitialize->Uninitialize(); pIDBInitialize->Release();
CoUninitialize();
return;
}
pIDBCreateCommand->Release();
Получив интерфейс на объект выполняющий текстовые команды мы теперь может наконец выполнить сам запрос SQL конечно проверив выполнение на корректность.
//Передаем строку с командой SQL
pICommandText->SetCommandText(DBGUID_DBSQL, wSQLString);
hr = pICommandText->Execute(NULL, IID_IRowset, NULL,&cRowsAffected, (IUnknown**) &pIRowset);
if (FAILED(hr))
{
cout << "Error Execute Command" << endl;
pICommandText->Release(); pIDBInitialize->Uninitialize();
pIDBInitialize->Release(); CoUninitialize();
return;
}
Ну вот, мы выполнили SQL запрос. Меня радует, что хоть до сюда добрались. Как то муторно все от этих новых технологий.